/*
 * TDS PEC 4
 * Grupo 3H2M
 * 
 * El paquete <code>edu.uoc.tds.pec4.server.impl</code> agrupa todas las clases
 * que encapsulan la implementación de los métodos de acceso RMI y el servidor.
 *
 */
package edu.uoc.tds.pec4.server.impl;

import edu.uoc.tds.pec4.beans.RankingAulaDTO;
import edu.uoc.tds.pec4.beans.RankingClienteDTO;
import edu.uoc.tds.pec4.beans.RankingLocalizacionDTO;
import edu.uoc.tds.pec4.beans.RentabilidadAulaDTO;
import edu.uoc.tds.pec4.beans.RentabilidadClienteDTO;
import edu.uoc.tds.pec4.beans.RentabilidadLocalizacionDTO;
import edu.uoc.tds.pec4.common.filters.FiltroFechas;
import edu.uoc.tds.pec4.common.filters.FiltroLocalizacion;
import edu.uoc.tds.pec4.rmi.GestorEstadisticasInterface;
import edu.uoc.tds.pec4.server.bbdd.DAOFactory;
import edu.uoc.tds.pec4.server.bbdd.IRankingDAO;
import edu.uoc.tds.pec4.server.bbdd.IRentabilidadDAO;
import edu.uoc.tds.pec4.server.bbdd.exceptions.DAOFactoryException;
import edu.uoc.tds.pec4.server.bbdd.exceptions.DataBaseDAOException;
import edu.uoc.tds.pec4.server.bbdd.exceptions.GestorEstadisticasException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.List;

/**
 * La clase <code>GestorEstadisticasImpl</code> contiene la implementaci�n de
 * todos los  m�todos indicados en la interfaz <code>GestorEstadisticasInterface</code><br />
 * Clase que implementa todas las funciones remotas que se pueden solicitar por RMI
 * y que tienen que ver con el subsistema de Estadisticas. <br />
 *
 * Representa el objeto remoto que se invoca en la comunicaci�n RMI para los 
 * servicios del subsistema de Estadisticas
 *
 * @author	Grupo 3H2M
 * @version	05/12/2011
 * @see		edu.uoc.tds.pec4.common.GestorEstadisticasInterface
 */
public class GestorEstadisticasImpl extends UnicastRemoteObject implements GestorEstadisticasInterface {
    
     /**
     * Constructor
     * @throws	RemoteException en caso de producirse un fallo de comunicaciones
     */
    public GestorEstadisticasImpl() throws RemoteException {
        super();
    }

    @Override
    public List<RankingAulaDTO> getRankingAulas(FiltroLocalizacion filtroLoc, FiltroFechas filtroFechas, Boolean agrupaMeses, Boolean agrupaLocal, int top) throws RemoteException,
            GestorEstadisticasException {

        List<RankingAulaDTO> lista = null;
        try {
            DAOFactory factory = DAOFactory.getDAOFactory();
            IRankingDAO dao = factory.getRankingDAO();
            lista = dao.getRankingAulas(filtroLoc, filtroFechas, 
                    agrupaMeses, agrupaLocal, top);
            
            //liberamos recursos
            factory = null;
            dao = null;
            
        } catch (DAOFactoryException daoF) {
            //throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
              //      + Constantes.SL + daoF.getMessage());
        } catch (DataBaseDAOException daoE) {
         //   throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
           //         + Constantes.SL + daoE.getMessage());
        }
        return lista;
    }

    @Override
    public List<RankingLocalizacionDTO> getRankingLocalizaciones(FiltroLocalizacion filtroLoc, FiltroFechas filtroFechas, Boolean agrupaMeses, Boolean agrupaLocal, int top) throws RemoteException,
            GestorEstadisticasException {

        List<RankingLocalizacionDTO> lista = null;
        try {
            DAOFactory factory = DAOFactory.getDAOFactory();
            IRankingDAO dao = factory.getRankingDAO();
            lista = dao.getRankingLocalizaciones(filtroLoc, filtroFechas, 
                    agrupaMeses, agrupaLocal, top);
            
            //liberamos recursos
            factory = null;
            dao = null;
            
        } catch (DAOFactoryException daoF) {
            //throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
              //      + Constantes.SL + daoF.getMessage());
        } catch (DataBaseDAOException daoE) {
         //   throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
           //         + Constantes.SL + daoE.getMessage());
        }
        return lista;
    }

    @Override
    public List<RankingClienteDTO> getRankingClientes(FiltroLocalizacion filtroLoc, FiltroFechas filtroFechas, Boolean agrupaMeses, Boolean agrupaLocal, int top) throws RemoteException,
            GestorEstadisticasException {

        List<RankingClienteDTO> lista = null;
        try {
            DAOFactory factory = DAOFactory.getDAOFactory();
            IRankingDAO dao = factory.getRankingDAO();
            lista = dao.getRankingClientes(filtroLoc, filtroFechas, agrupaMeses, 
                    agrupaLocal, top);
            
            //liberamos recursos
            factory = null;
            dao = null;
            
        } catch (DAOFactoryException daoF) {
            //throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
              //      + Constantes.SL + daoF.getMessage());
        } catch (DataBaseDAOException daoE) {
         //   throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
           //         + Constantes.SL + daoE.getMessage());
        }
        return lista;
    }

    @Override
    public List<RentabilidadAulaDTO> getRentabilidadAulas(FiltroLocalizacion filtroLoc, FiltroFechas filtroFechas, int tipoLocalizacion, int top) throws RemoteException,
            GestorEstadisticasException {
        List<RentabilidadAulaDTO> lista = null;
        try {
            DAOFactory factory = DAOFactory.getDAOFactory();
            IRentabilidadDAO dao = factory.getRentabilidadDAO();
            lista = dao.getRentabilidadAulas(filtroLoc, filtroFechas, 
                    tipoLocalizacion, top);
            
            //liberamos recursos
            factory = null;
            dao = null;
            
        } catch (DAOFactoryException daoF) {
            //throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
              //      + Constantes.SL + daoF.getMessage());
        } catch (DataBaseDAOException daoE) {
         //   throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
           //         + Constantes.SL + daoE.getMessage());
        }
        return lista;
    }

    @Override
    public List<RentabilidadClienteDTO> getRentabilidadClientes(FiltroLocalizacion filtroLoc, FiltroFechas filtroFechas, int tipoLocalizacion, int top) throws RemoteException,
            GestorEstadisticasException {
        List<RentabilidadClienteDTO> lista = null;
        try {
            DAOFactory factory = DAOFactory.getDAOFactory();
            IRentabilidadDAO dao = factory.getRentabilidadDAO();
            lista = dao.getRentabilidadClientes(filtroLoc, filtroFechas, 
                    tipoLocalizacion, top);
            
            //liberamos recursos
            factory = null;
            dao = null;
            
        } catch (DAOFactoryException daoF) {
            //throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
              //      + Constantes.SL + daoF.getMessage());
        } catch (DataBaseDAOException daoE) {
         //   throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
           //         + Constantes.SL + daoE.getMessage());
        }
        return lista;
    }

    @Override
    public List<RentabilidadLocalizacionDTO> getRentabilidadLocalizacion(FiltroLocalizacion filtroLoc, FiltroFechas filtroFechas, int tipoLocalizacion, int top) throws RemoteException,
            GestorEstadisticasException {
        
        List<RentabilidadLocalizacionDTO> lista = null;
        try {
            DAOFactory factory = DAOFactory.getDAOFactory();
            IRentabilidadDAO dao = factory.getRentabilidadDAO();
            lista = dao.getRentabilidadLocalizacion(filtroLoc, filtroFechas, 
                    tipoLocalizacion, top);
            
            //liberamos recursos
            factory = null;
            dao = null;
            
        } catch (DAOFactoryException daoF) {
            //throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
              //      + Constantes.SL + daoF.getMessage());
        } catch (DataBaseDAOException daoE) {
         //   throw new GestorAulasException(GestorAulasException.ERROR_LISTA_SOLICITUDES
           //         + Constantes.SL + daoE.getMessage());
        }
        return lista;
    }
}
